package com.qwert.shortlink.admin.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.qwert.shortlink.admin.dao.entity.User;
import com.qwert.shortlink.admin.dto.req.user.UserLoginReqDTO;
import com.qwert.shortlink.admin.dto.req.user.UserRegisterReqDTO;
import com.qwert.shortlink.admin.dto.req.user.UserUpdateReqDTO;
import com.qwert.shortlink.admin.dto.resp.user.UserLoginRespDTO;
import com.qwert.shortlink.admin.dto.resp.user.UserRespDTO;

/**
 * 用户接口层
 * @author qwert
 * @create 2024/6/25 10:07
 * @version 1.0.0
 **/
public interface IUserService extends IService<User> {
    /**
     * 根据用户名查询用户数据
     * @param username 用户名
     * @return 用户响应数据
     */
    UserRespDTO getUserByUsername(String username);

    /**
     * 查询用户名是否重复
     * @param username 用户名
     * @return 用户名不存在返回True，存在返回False
     */
    Boolean hasUsername(String username);

    /**
     * 注册用户
     * @param userRegisterReqDTO 注册用户请求参数
     * @return 注册更新的行数
     */
    Integer register(UserRegisterReqDTO userRegisterReqDTO);

    /**
     * 更新用户
     * @param userUpdateReqDTO 更新用户请求参数
     * @return  更新行数
     */
    Integer update(UserUpdateReqDTO userUpdateReqDTO);

    /**
     * 用户登录
     * @param userLoginReqDTO   用户登录请求参数
     * @return  用户登录响应
     */
    UserLoginRespDTO login(UserLoginReqDTO userLoginReqDTO);

    /**
     * 检查用户是否登录
     * @param token 登录token
     * @return  是否登录的判断，登录返回true，未登录返回false
     */
    Boolean checkLogin(String username, String token);

    /**
     * 退出登录
     * @param username 用户名
     * @param token    用户登录token
     */
    void logout(String username, String token);
}
